package com.jie.langlangmall.service;

import com.jie.langlangmall.dto.UmsAdminParam;
import com.jie.langlangmall.dto.UpdateAdminPasswordParam;
import com.jie.langlangmall.model.UmsAdmin;
import com.jie.langlangmall.model.UmsResource;
import com.jie.langlangmall.model.UmsRole;
import jakarta.validation.constraints.NotEmpty;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.List;

/**
 * @Author Jie
 * @Date 2024/11/21 21:40
 * @Email 3217998214@qq.com
 */
public interface UmsAdminService {

    /**
     * 根据用户名获取后台管理员
     *
     * @param username
     * @return
     */
    UmsAdmin getAdminByUsername(String username);

    /**
     * 获取用户信息
     *
     * @param username
     * @return
     */
    UserDetails loadUserByUsername(String username);

    /**
     * 获取缓存服务
     *
     * @return
     */
    UmsAdminCacheService getCacheService();

    /**
     * 获取指定用户的可访问资源
     *
     * @param adminId
     * @return
     */
    List<UmsResource> getResourceList(Long adminId);

    /**
     * 登录并返回token
     *
     * @param username
     * @param password
     * @return
     */
    String login(@NotEmpty String username, @NotEmpty String password);

    /**
     * 管理员用户注册
     *
     * @param umsAdminParam
     * @return
     */
    UmsAdmin register(UmsAdminParam umsAdminParam);

    /**
     * 获取指定用户对应的角色
     *
     * @param adminId
     * @return
     */
    List<UmsRole> getRoleList(Long adminId);

    /**
     * 刷新token
     *
     * @param token
     * @return 旧的token
     */
    String refreshToken(String token);

    /**
     * 退出登录
     *
     * @param name
     */
    void logout(String name);

    /**
     * 根据id获取用户
     *
     * @param adminId
     * @return
     */
    UmsAdmin getItem(Long adminId);

    /**
     * 根据用户名或者昵称分页查询用户
     *
     * @param keyword
     * @param pageSize
     * @param pageNum
     * @return
     */
    List<UmsAdmin> list(String keyword, Integer pageSize, Integer pageNum);

    /**
     * 修改指定用户的信息
     *
     * @param id
     * @param umsAdmin
     * @return
     */
    int update(Long id, UmsAdmin umsAdmin);

    /**
     * 删除指定用户
     *
     * @param id
     * @return
     */
    int delete(Long id);

    /**
     * 更新密码
     *
     * @param param
     * @return
     */
    int updatePassword(UpdateAdminPasswordParam param);

    /**
     * 修改用户角色关系
     *
     * @param adminId
     * @param roleIds
     * @return
     */
    int updateRole(Long adminId, List<Long> roleIds);

    /**
     * 获取当前登录的管理员
     *
     * @return
     */
    UmsAdmin getCurrentAdmin();


}
